package com.aha.dataanalyzeandview.exception;


import lombok.Data;
import lombok.ToString;

/**
 * 定义异常代码，和异常信息
 * 101  获取连接用户信息异常，请确定是否具有此实例的操作权限
 * 102  插入表的元数据信息异常！
 * 103  插入列信息异常！
 * 104  执行创建表时异常！
 * 105  查询连接信息异常！
 * 106  连接超时，请确保服务器正常运行，账号和密码正确以及权限是被允许的。
 * 107  你所创建的元数据已经存在！
 * 108  元数据已被引用，请删除引用后再次重试。
 */


@ToString
@Data
public class UserDefinedException extends RuntimeException {

    private Integer code;
    private String info;

    public UserDefinedException(){
        super();
    }

    private UserDefinedException(String message){
        super(message);
    }

    private UserDefinedException(int code, String message) {
        super(message);
        this.info = message;
        this.code = code;
    }

    public UserDefinedException(int code, String message, String info){
        super(message);
        this.code = code;
        this.info = info;
    }


    /**
     * 自定义异常类型
     * @param code
     * @return
     */
    public void except(int code){
        this.setCode(code);
        switch (code){
            case 101: this.setInfo("获取连接用户信息异常，请确定是否具有此实例的操作权限  ");break;
            case 102: this.setInfo("插入表的元数据信息异常！");break;
            case 103: this.setInfo("插入列信息异常！");break;
            case 104: this.setInfo("执行创建表时异常！");break;
            case 105: this.setInfo("查询连接信息异常！");break;
            case 106: this.setInfo("连接超时，请确保服务器正常运行，账号和密码正确以及权限是被允许的。");break;
            case 107: this.setInfo("你所创建的元数据已经存在！");break;
            case 108: this.setInfo("元数据被引用，请删除引用后再次重试。");break;
            case 109: this.setInfo("hdfs 权限异常！");break;
            case 110: this.setInfo("hdfs 并发异常！");break;
            case 111: this.setInfo("hdfs 读写异常！");break;
            case 112: this.setInfo("hdfs url 错误！");break;
            default:  this.setInfo("未定义的异常");
        }
    }

    /**
     * 自定义异常类型
     * @param code
     * @return
     */
    public static UserDefinedException except(int code, String message){
        UserDefinedException userDefinedException = new UserDefinedException(message);
        userDefinedException.except(code);
        userDefinedException.setInfo(message);
        return userDefinedException;
    }


}
